建造者模式(Builder Pattern)
定义
建造者模式是一种创建对象的设计模式,它允许通过一步步的方式构建复杂对象。通常涉及一个建造者(Builder)和一个指挥者(Director)。
特点
- 复杂对象的构建:适用于需要多个步骤和复杂配置的对象。
- 可读性:通过链式调用或逐步设置参数,代码更具可读性。
- 灵活性:可以根据不同的需求构建不同的对象。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
type Car struct { Color string Model string } type CarBuilder struct { car *Car } func NewCarBuilder() *CarBuilder { return &CarBuilder{car: &Car{}} } func (b *CarBuilder) SetColor(color string) *CarBuilder { b.car.Color = color return b } func (b *CarBuilder) SetModel(model string) *CarBuilder { b.car.Model = model return b } func (b *CarBuilder) Build() *Car { return b.car } // 使用 car := NewCarBuilder().SetColor("Red").SetModel("Sedan").Build() |
选项模式(Options Pattern)
定义
选项模式是一种通过结构体字段或函数选项来配置对象的模式。它通常用于提供可选参数的灵活性。
特点
- 简化参数传递:适用于有多个可选参数的情况,可以避免长参数列表。
- 灵活性和可扩展性:可以很容易地添加新选项而不影响现有代码。
- 默认值:可以设置结构体字段的默认值。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
type Server struct { Host string Port int } type Option func(*Server) func WithHost(host string) Option { return func(s *Server) { s.Host = host } } func WithPort(port int) Option { return func(s *Server) { s.Port = port } } func NewServer(options ...Option) *Server { server := &Server{ Host: "localhost", // 默认值 Port: 8080, // 默认值 } for _, option := range options { option(server) } return server } // 使用 server := NewServer(WithHost("127.0.0.1"), WithPort(9090)) |
选项模式
- 默认值:选项模式通常用于配置对象的可选参数,允许某些属性在未显式赋值时使用默认值。这意味着用户可以选择只设置他们关心的参数,而其他参数将自动使用预定义的默认值。
- 灵活性:通过选项模式,可以轻松扩展和修改对象的配置,而不需要改变构造函数的签名。
建造者模式
- 必需赋值:在建造者模式中,通常需要逐步设置对象的所有必需属性,直到构建完成。虽然可以设置默认值,但在构建过程中,用户通常会明确地对每个属性进行赋值。
- 明确性:建造者模式强调构建过程的明确性和可读性,确保所有必要的属性都被设置,以避免不完整或不一致的对象状态。
总结
- 选项模式允许使用默认值,提供了更大的灵活性,适合于可选参数的配置。
- 建造者模式强调逐步构建和明确赋值,适合需要确保所有必需属性都被设置的复杂对象。
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 - golang 建造者和选项模式